#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include<stdlib.h>
#include<string.h>
#include<limits.h>

//int cmp(const void* p1, const void* p2)
//{
//    return *(char*)p1 - *(char*)p2;
//}
//
//int main()
//{
//    char alphabet[1010] = { 0 };
//
//    scanf("%s", alphabet);
//    qsort(alphabet, strlen(alphabet), sizeof(char), cmp);
//    printf("%s", alphabet);
//
//    return 0;
//}

//int pivotIndex(int* nums, int numsSize)
//{
//    int left = 0;
//    int right = numsSize - 1;
//    int leftsum = 0;
//    int rightsum = 0;
//
//    while (left < right)
//    {
//        if (leftsum < rightsum)
//        {
//            leftsum += nums[left++];
//        }
//        else if (leftsum > rightsum)
//        {
//            rightsum += nums[right--];
//        }
//        else
//        {
//            leftsum += nums[left++];
//            rightsum += nums[right--];
//        }
//    }
//    if (leftsum == rightsum)
//    {
//        return left;
//    }
//
//    int sum = 0;
//    int i = 0;
//    for (i = 1; i < numsSize - 1; ++i)
//    {
//        sum += nums[i];
//    }
//    if (-nums[0] == sum + nums[numsSize - 1])
//    {
//        return 0;
//    }
//    if (-nums[numsSize - 1] == nums[0] + sum)
//    {
//        return numsSize - 1;
//    }
//
//    return -1;
//}

//int IsTrue(int num)
//{
//    int div = 0;
//    int quotient = num;
//    while (quotient)
//    {
//        div = quotient % 10;
//
//        if (div&&(num % div))
//        {
//            return 0;
//        }
//        quotient /= 10;
//    }
//
//    return 1;
//}
//int* selfDividingNumbers(int left, int right, int* returnSize)
//{
//    int* ret = NULL;
//    *returnSize = 0;
//    while (left <= right)
//    {
//        if (IsTrue(left))
//        {
//            (*returnSize)++;
//            ret = (int*)realloc(ret, (*returnSize) * sizeof(int));
//            ret[*returnSize - 1] = left;
//        }
//        left++;
//    }
//
//    return ret;
//}


void GetAnswer(int* answer, int* start, int* end, int pos)
{
    static int product1 = 1;
    static int product2 = 1;
    int product = product1;
    if (start < end)
    {
        product1 = product1 * (*start);
        GetAnswer(answer, start+1, end, pos + 1);
    }

    answer[pos] = product * product2;
    product2 = product2 * (*start);
}

int* productExceptSelf(int* nums, int numsSize, int* returnSize)
{

    int* answer = (int*)malloc(sizeof(int) * numsSize);
    if (1 == numsSize)
    {
        answer[0] = nums[0];
        return answer;
    }
    GetAnswer(answer, nums, nums + numsSize - 1, 0);
    *returnSize = numsSize;

    return answer;
}


int main()
{
    //int nums[10] = { 2,1,-1 };
    //int size = 3;
    //int ret=pivotIndex(nums, size);
    //printf("%d", ret);
    int size = 0;
    int nums[7] = {0,1,1,9,1,1,-1 };
    int*ret=productExceptSelf(nums, 7, &size);


    return 0;
}